package com.mjlf.akka.simple;

import akka.actor.AbstractActor;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;

/**
 * @ClassName HelloWorldDemo
 * @auther mjlf
 * @Date 2019/8/5 9:53
 * @Description 简单练习使用akka接收数据
 */
public class HelloWorldDemo {

    /**
     * 定义一个静态内部类， 该类需要继承AbstractActor, 在Akka中， 所有的组建都是akka, 这里定义
     * 一个Actor类用于接收消息， 将接收到的消息直接打印到控制台即可
     */
    static class HelloWorldActor extends AbstractActor{

        /**
         * 接收消息方法
         * @return
         */
        @Override
        public Receive createReceive() {

            /**
             * 构建接收消息对象， matchAny标识匹配传过来的任何类型消息，在akka中提供了很多不同的match方法
             * 针对不同的方法,使用方式不同，有些方法只能接收指定类型的数据，有些方法只能接收相等数据
             */
            return receiveBuilder().matchAny(msg ->{
                System.out.println("接收到信息 : " + msg);
            }).build();
        }
    }

    public static void main(String[] args) {

        //ActorSystem 是akka的顶层Actor
        ActorSystem system = ActorSystem.create();

        //使用ActorSystem构建出一个ActorRef
        ActorRef actorRef = system.actorOf(Props.create(HelloWorldActor.class), "HelloWorld");

        //发送消息
        actorRef.tell("信息", ActorRef.noSender());
    }
}
